Welcome to pandas!

7.7 分组后的转换

分组转换不像分组聚合会将数据收拢,而是保持原来的数据结构,相当于对每组数据区域做转换设置 ,要完成这类数据处理,需要使用transfrom()函数,结构如下:

transfrom(func,*args,**kwargs)

func :执行转换的函数

*args :传递给func的位置参数

**kwargs :传递给func的关键字参数


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.07 分组后的转换.xlsx" )

print (df)

df1=df.groupby( "组别" ).transform(sum)

print (df1)

返回:

成员 语文 数学
0 张三李四 113 31
1 张三李四 113 31
2 王麻子许流子 104 46
3 王麻子许流子 104 46
4 郭鬼子小曾韦大宝 153 131
5 郭鬼子小曾韦大宝 153 131
6 郭鬼子小曾韦大宝 153 131

自定义函数转换方式,除了内置函数,用用户也可在自定义函数来做转换处理,比如统计出每个人的分数占所有组所在科目的百分比。

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.7.07 分组后的转换.xlsx" )

print (df)

df.iloc[:,2:]=df.groupby( "组别" )[[ "语文","数学" ]].transform( lambda s:(s/s.sum()* 100 ).astype(str).str[:5]+ "%" )

print (df)

返回:

组别 成员 语文 数学
0 A组 张三 17 18
1 A组 李四 96 13
2 B组 王麻子 46 13
3 B组 许流子 58 33
4 C组 郭鬼子 59 57
5 C组 小曾 60 8
6 C组 韦大宝 34 66

组别 成员 语文 数学
0 A组 张三 15.04% 58.06%
1 A组 李四 84.95% 41.93%
2 B组 王麻子 44.23% 28.26%
3 B组 许流子 55.76% 71.73%
4 C组 郭鬼子 38.56% 43.51%
5 C组 小曾 39.21% 6.106%
6 C组 韦大宝 22.22% 50.38%